import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;

public class Map
	{
		
		private ArrayList<Planet>	planets							= new ArrayList<Planet>();	//listan med alla planeter
		private boolean						loading							= false;										//ska vara true när man laddar en ny karta
		//private int					selected			= 0;						//vad? //kull att hitta sånna komentarer
		private int								lastSelectedPlanet	= 404;											//indexet av den planeten av spelaraens planeter som har blivit valt senast, 404 är standartvärde när inga är valda
																																							
		public Map()
			{
				
			}
		
		public void drawMap(Graphics g, int width, int height)
			{
				for (int i = 0; i < planets.size(); i++)
					{
						planets.get(i).ritaUt(g);
					}
				
				//om man genererar en karta rita ut en loading meddelande
				if (loading)
					{
						g.drawString("Loading.", (int) (width / 2 * 0.8), (int) (height / 2 * 0.95));
					}
				
			}
		
		public void showSelection(Graphics g)
			{
				for (int i = 0; i < planets.size(); i++)
					{
						if (planets.get(i).isSelected())
							{
								g.drawOval((int) (planets.get(i).getPosition().x - planets.get(i).getSide()),
										(int) (planets.get(i).getPosition().y - planets.get(i).getSide()),
										(int) (planets.get(i).getSide() + planets.get(i).getSide()), (int) (planets
												.get(i).getSide() + planets.get(i).getSide()));
							}
					}
				//				if (lastSelectedPlanet != 42 && selected > 1)
				//					{
				//						g.drawLine(
				//								(int) (planets.get(markeradePlaneter[0]).getX() + planets
				//										.get(markeradePlaneter[0]).getSide() * 0.5),
				//								(int) (planets.get(markeradePlaneter[0]).getY() + planets
				//										.get(markeradePlaneter[0]).getSide() * 0.5),
				//								(int) (planets.get(markeradePlaneter[1]).getX() + planets
				//										.get(markeradePlaneter[0]).getSide() * 0.5),
				//								(int) (planets.get(markeradePlaneter[1]).getY() + planets
				//										.get(markeradePlaneter[0]).getSide() * 0.5));
				//					}
			}
		
		public int generateNewMap(int width, int height, Main main)
			{
				boolean continueGenerate = true;
				while (continueGenerate)
					{
						loading = true;
						continueGenerate = false;
						//nollställ listan med planeter, det är viktigt ifall senaste försöket var dålig
						planets = null;
						planets = new ArrayList<Planet>();
						//lägg manuellt till spelarplanet
						planets.add(Planet.nySpelPlanet(Color.RED, width, height));
						planets.add(Planet.nySpelPlanet(Color.BLUE, width, height));
						planets.add(Planet.nySpelPlanet(Color.BLUE, width, height));
						planets.add(Planet.nySpelPlanet(Color.BLUE, width, height));
						//lägg till neutrala planeter
						for (int i = 0; i < 15; i++)
							{
								planets.add(Planet.nyNetralPlanet(width, height));
							}
						//kolla om den upsätning med planeter håller, att de inte krokkar, annars börja om
						sats1: for (int i = 0; i < planets.size(); i++)
							{
								for (int j = 0; j < planets.size(); j++)
									{
										if (i != j)
											{
												if (Planet.krock(planets.get(i), planets.get(j)) == true)
													{
														//två planeter krockar, börja om
														continueGenerate = true;
														planets = new ArrayList<Planet>();
														main.repaint();
														break sats1;
													}
											}
									}
							}
					}
				loading = false;
				return (0);
			}
		
		/**
		 * @return the planets
		 */
		public ArrayList<Planet> getPlanets()
			{
				return planets;
			}
		
		/**
		 * @param planets
		 *        the planets to set
		 */
		public void setPlanets(ArrayList<Planet> planets)
			{
				this.planets = planets;
			}
		
		/**
		 * @return the loading
		 */
		public boolean isLoading()
			{
				return loading;
			}
		
		/**
		 * @param loading
		 *        the loading to set
		 */
		public void setLoading(boolean loading)
			{
				this.loading = loading;
			}
		
		//		/**
		//		 * @return the selected
		//		 */
		//		public int getSelected()
		//			{
		//				return selected;
		//			}
		//		
		//		/**
		//		 * @param selected
		//		 *        the selected to set
		//		 */
		//		public void setSelected(int selected)
		//			{
		//				this.selected = selected;
		//			}
		
		/**
		 * @return the lastSelectedPlanet
		 */
		public int getLastSelectedPlanet()
			{
				return lastSelectedPlanet;
			}
		
		/**
		 * @param lastSelectedPlanet
		 *        the lastSelectedPlanet to set
		 */
		public void setLastSelectedPlanet(int lastSelectedPlanet)
			{
				this.lastSelectedPlanet = lastSelectedPlanet;
			}
		
	}